第一部: 基本文法
実行コンテキスト
"Script"の実行コンテキストは多くの実行環境のデフォルト実行コンテキスト
デフォルトはstrict modeでは無い
"Module"の実行コンテキストはJavaScriptをモジュールとして実行するためにECMAScript2015で導入
デフォルトはscrict mode
データ型とリテラル
typeof nullがobjectになるのはNetscapeのバグの名残
他の言語に似たような事例あるのか?(聞いたことない)
そもそもtypeof nullの結果を見るユースケースがよくわからないから、一度deprecatedとかにして時間置いてから直すでも良さそうだけど何故放置?
演算子
有名なやつ"2" + "2" - "2"が20になる
動作としてはそんなに変ではなく、まず"2" + "2"が評価されて文字結合で"22"になる。その後"22" - "2"が評価されるが、マイナス演算子は減算のみのため暗黙的に型変換が行われて(?)22 - 2となり最終的な結果が20となっていそう。
やっぱ暗黙的な型変換とかダメでは??
PHPには文字列結合演算子で.があったりそもそも演算子で文字列結合を行わないプログラミング言語もある。
インクリメント/デクリメント系はバグの原因になりやすいから使わない方が良い
Nullish coalescing演算子知らなかった
ループと反復処理
for...of文はSynbol.iteratorを実装したiterableの反復処理を行う
JavaScriptではiterableは全てiteratorであるという理解になる?
例えばPythonではiterableなオブジェクトは必ずiteratorのサブクラスであるとは限らない
Listはiteratorではないがiterableではある
https://www.youtube.com/watch?v=Ig6X6VH15RY
プロトタイプオブジェクト
プロトタイプメソッドとインスタンスメソッドはインスタンスメソッドが優先される
メタプログラミングで使えそう